using System;
using System.Data;
using MySql.Data.MySqlClient;
using System.Collections;
using System.Collections.Specialized;
using System.Collections.Generic;
using Novapangeia.Dominio;

namespace Novapangeia.Repositorio
{	
	public partial class RepositorioEstoque
	{	   
		
		private ISqlHelper sqlHelper;
		
		public  RepositorioEstoque(ISqlHelper _sqlHelper)
        {
            if (_sqlHelper == null)
                sqlHelper = new SqlHelper();
            else
                sqlHelper = _sqlHelper;
        }
		
		public static class Parameters
		{
			public static MySqlParameter Id
			{
				get
				{
					return new MySqlParameter("p_Id", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Usuario_id
			{
				get
				{
					return new MySqlParameter("p_Usuario_id", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Espadas
			{
				get
				{
					return new MySqlParameter("p_Espadas", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Lancas
			{
				get
				{
					return new MySqlParameter("p_Lancas", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Arcos
			{
				get
				{
					return new MySqlParameter("p_Arcos", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Ouro
			{
				get
				{
					return new MySqlParameter("p_Ouro", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Madeira
			{
				get
				{
					return new MySqlParameter("p_Madeira", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Comida
			{
				get
				{
					return new MySqlParameter("p_Comida", MySqlDbType.Int32, 0);
				}
			}
			
			public static MySqlParameter Minerio
			{
				get
				{
					return new MySqlParameter("p_Minerio", MySqlDbType.Int32, 0);
				}
			}
			
		}	
		
		//=================================================================
		//  Carrega todos os registros do banco de dados
		//=================================================================
		public List<Estoque> LoadAll() 
		{
			string sql = @"SELECT id, usuario_id, espadas, lancas, arcos, ouro, madeira, comida, minerio FROM estoque";
					
			List<Estoque> entityList = new List<Estoque>();
			
			MySqlDataReader reader = sqlHelper.ExecuteReader(CommandType.Text, sql);
			
			Estoque entity;
			
			while (reader.Read())
            {
                entity = preencherEstoque(reader);
				entityList.Add(entity);
            }

            reader.Close();
			
			return entityList;
		}
	
		//=================================================================
		//  Carrega apenas um registro, buscado pela chave primária
		//=================================================================
		public Estoque CarregarEstoquePorUsuarioId(int Id)
		{
		    string sql =
		        @"	SELECT
		            id,
		            usuario_id,
		            espadas,
		            lancas,
		            arcos,
		            ouro,
		            madeira,
		            comida,
		            minerio
	            FROM estoque
	            WHERE
		            (usuario_id = @p_Usuario_id)";

			MySqlParameter p;
			p = Parameters.Usuario_id;
			p.Value = Id;
		
			MySqlDataReader reader = sqlHelper.ExecuteReader(CommandType.Text, sql, new MySqlParameter[] { p } , CommandBehavior.SingleRow);
			
			Estoque estoque = new Estoque();

            if (reader.HasRows) { reader.Read(); estoque = preencherEstoque(reader); }
            else { estoque = null; }
            reader.Close();
			return estoque;
		}
		
        private Estoque preencherEstoque(MySqlDataReader  r)
        {
            Estoque estoque = new Estoque();
			
			estoque.Id = r.GetInt32("Id");
            estoque.Usuario_id = r.GetInt32("Usuario_id");
            estoque.Espadas = r.GetInt32("Espadas");
            estoque.Lancas = r.GetInt32("Lancas");
            estoque.Arcos = r.GetInt32("Arcos");
            estoque.Ouro = r.GetInt32("Ouro");
            estoque.Madeira = r.GetInt32("Madeira");
            estoque.Comida = r.GetInt32("Comida");
            estoque.Minerio = r.GetInt32("Minerio");

            return estoque;
        }
	
		public void CadastrarEstoque(Estoque estoque)
		{
            string sql = @"INSERT
	                        INTO estoque
	                        (
		                        usuario_id,
		                        espadas,
		                        lancas,
		                        arcos,
		                        ouro,
		                        madeira,
		                        comida,
		                        minerio
	                        )
	                        VALUES
	                        (
		                        @p_usuario_id,
		                        @p_espadas,
		                        @p_lancas,
		                        @p_arcos,
		                        @p_ouro,
		                        @p_madeira,
		                        @p_comida,
		                        @p_minerio
	                        )";

			List<MySqlParameter> Parametros = new List<MySqlParameter>();
			
			MySqlParameter p;

			p = Parameters.Usuario_id;
			p.Value = estoque.Usuario_id;
			Parametros.Add(p);

			p = Parameters.Espadas;
			p.Value = estoque.Espadas;
			Parametros.Add(p);

			p = Parameters.Lancas;
			p.Value = estoque.Lancas;
			Parametros.Add(p);

			p = Parameters.Arcos;
			p.Value = estoque.Arcos;
			Parametros.Add(p);

			p = Parameters.Ouro;
			p.Value = estoque.Ouro;
			Parametros.Add(p);

			p = Parameters.Madeira;
			p.Value = estoque.Madeira;
			Parametros.Add(p);

			p = Parameters.Comida;
			p.Value = estoque.Comida;
			Parametros.Add(p);

			p = Parameters.Minerio;
			p.Value = estoque.Minerio;
			Parametros.Add(p);


            sqlHelper.ExecuteSql(CommandType.Text, sql, Parametros.ToArray());
		}
	
		public bool atualizarEstoque(Estoque entity)
		{
            string sql = @"	UPDATE estoque
	                        SET
		                        usuario_id = @p_usuario_id,
		                        espadas = @p_espadas,
		                        lancas = @p_lancas,
		                        arcos = @p_arcos,
		                        ouro = @p_ouro,
		                        madeira = @p_madeira,
		                        comida = @p_comida,
		                        minerio = @p_minerio
	                        WHERE
		                        id = @p_id";

			List<MySqlParameter> parameters = new List<MySqlParameter>();
			
			MySqlParameter p;
			
			p = Parameters.Id;
			p.Value = entity.Id;
			parameters.Add(p);

			p = Parameters.Usuario_id;
			p.Value = entity.Usuario_id;
			parameters.Add(p);

			p = Parameters.Espadas;
			p.Value = entity.Espadas;
			parameters.Add(p);

			p = Parameters.Lancas;
			p.Value = entity.Lancas;
			parameters.Add(p);

			p = Parameters.Arcos;
			p.Value = entity.Arcos;
			parameters.Add(p);

			p = Parameters.Ouro;
			p.Value = entity.Ouro;
			parameters.Add(p);

			p = Parameters.Madeira;
			p.Value = entity.Madeira;
			parameters.Add(p);

			p = Parameters.Comida;
			p.Value = entity.Comida;
			parameters.Add(p);

			p = Parameters.Minerio;
			p.Value = entity.Minerio;
			parameters.Add(p);


            return sqlHelper.ExecuteSql(CommandType.Text, sql, parameters.ToArray());	
		}

        public void GerarRecursos()
        {
            sqlHelper.ExecuteSql(CommandType.Text, "call sp_gerar_recursos");
        }
	}
}
